﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace DimensionalMeasurement
{
    class MySQLHelper
    {

        public static bool ExecuteNonQuery(string connectionString, string cmdText)
        {
            MySqlConnection conn = new MySqlConnection(connectionString);//创建连接字符串，提供连接数据库的必要信息
            try
            {
                conn.Open();//连接数据库
                if (conn.State.ToString() == "Open")//检测是否连接成功
                {
                    MySqlCommand cmd = new MySqlCommand(cmdText, conn);//创建MySqlCommand类，并提供SQL语句，以及要操作的 MySqlConnection对象
                    cmd.ExecuteNonQuery();//执行SQL语句，对连接的数据库进行操作，ExecuteNonQuery()方法不能用于查询语句
                }
                else
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
            conn.Close();//关键的一步，不要忘记关闭连接！！！！！
            return true;
        }

        public static DataTable Select(string connectionString, string cmdText)
        {
            DataTable dt = new DataTable();//创建 DataTable对象
            MySqlConnection conn = new MySqlConnection(connectionString);//创建连接字符串，提供连接数据库的必要信息
            try
            {
                conn.Open();//连接数据库
                if (conn.State.ToString() == "Open")//检测是否连接成功
                {
                    MySqlCommand cmd = new MySqlCommand(cmdText, conn);
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);//第二种查询方式，使用MySqlDataAdapter对象
                    DataSet ds = new DataSet();//创建 DataSet对象
                    da.Fill(ds, "dt");//调用Fill方法执行SQL语句，并将查询存入DataSet对象中
                    dt = ds.Tables["dt"];//对数据库检索后，被取回的数据就存放在DataTable对象中
                }
                conn.Close();//关键的一步，不要忘记关闭连接！！！！！
                return dt;
            }
            catch (Exception ex)
            {
                Tool.LogForm(ex.ToString());
                return null;
            }

        }


        /// <summary>
        /// 执行插入修改删除数据SQL语句，返回受影响记录数
        /// </summary>
        /// <param name="sqlstr">sql语句</param>
        /// <param name="cmdparams">参数</param>
        /// <returns></returns>
        public static int ExecSql(string connectionString, string sqlstr, params MySqlParameter[] cmdparams)
        {
            using (MySqlConnection conn = new MySqlConnection(connectionString))//连接通道（连接数据库）
            {
                using (MySqlCommand comd = new MySqlCommand(sqlstr, conn))//执行sql命令的对象
                {
                    try
                    {
                        conn.Open();//打开通道
                        if (cmdparams != null)
                        {
                            foreach (MySqlParameter para in cmdparams)
                            {
                                comd.Parameters.AddWithValue(para.ParameterName, para.Value);//写入参数
                            }
                        }
                        return comd.ExecuteNonQuery();//执行并返回受影响的记录数
                    }
                    catch (Exception ex)
                    {
                        Tool.LogForm("数据库写入报警" + ex.ToString());
                        return -1;
                    }
                }
            }
        }


        /// <summary>
        /// 执行一条计算查询结果语句，返回查询结果（object）。
        /// </summary>
        /// <param name="SQLString">计算查询结果语句</param>
        /// <returns>查询结果（object）</returns>
        public static object GetSingle(string connectionString, string SQLString)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                using (MySqlCommand cmd = new MySqlCommand(SQLString, connection))
                {
                    try
                    {
                        connection.Open();
                        object obj = cmd.ExecuteScalar();
                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                        {
                            return null;
                        }
                        else
                        {
                            return obj;
                        }
                    }
                    catch (MySql.Data.MySqlClient.MySqlException e)
                    {
                        connection.Close();
                        throw e;
                    }
                }
            }
        }
        public static MySqlDataReader ExecuteReader(string connectionString, string cmdText)
        {
            MySqlConnection conn = new MySqlConnection(connectionString);//创建连接字符串，提供连接数据库的必要信息
            try
            {
                conn.Open();//连接数据库
                if (conn.State.ToString() == "Open")//检测是否连接成功
                {
                    MySqlCommand cmd = new MySqlCommand(cmdText, conn);//创建MySqlCommand类，并提供SQL语句，以及要操作的 MySqlConnection对象
                    MySqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);//执行SQL语句，对连接的数据库进行操作，ExecuteNonQuery()方法不能用于查询语句
                    //conn.Close();//关键的一步，不要忘记关闭连接！！！！！
                    return dr;
                }
                else
                {
                    return null;
                }
            }
            catch (Exception ex)
            {
                conn.Close();//关键的一步，不要忘记关闭连接！！！！！
                return null;
            }

        }



        /// <summary>
        /// 执行查询语句，返回DataSet
        /// </summary>
        /// <param name="SQLString">查询语句</param>
        /// <returns>DataSet</returns>
        public static DataSet Query(string connectionString, string SQLString)
        {
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }
    }
}
